package cn.kgc.mcartoon.dto;


import lombok.AllArgsConstructor;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


@Data
@AllArgsConstructor
public class ResultDto {

    private static Logger logger = LoggerFactory.getLogger(ResultDto.class);

    private Integer code; //响应业务状态码

    private Boolean flag; //响应是否正常

    private String message; //响应描述

    private Object data; //响应数据



    /**
     * 构造方法封装相应状态吗、信息、对象、及是否正常
     * @param code
     * @param message
     * @param data
     */
    public ResultDto(Integer code, String message, Object data) {

        this.code = code;
        this.message = message;
        this.data = data;
        this.flag = code == ResultEnum.SUCCESS.getCode() ? true: false;
    }

    /**
     * 响应成功方法，封装状态码、信息
     * @return
     */
    public static ResultDto ok() {
        return new ResultDto(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getDesc(),
                null);
    }

    /**
     * 响应成功方法，封装状态码、信息和数据
     * @param data
     * @return
     */
    public static ResultDto ok(Object data) {
        return new ResultDto(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getDesc(),
                data);
    }

    /**
     * 响应成功方法，封装信息和数据
     * @param message
     * @param data
     * @return
     */
    public static ResultDto ok(String message, Object data) {
        return new ResultDto(ResultEnum.SUCCESS.getCode(), message, data);
    }

    /**
     * 响应方法，封装状态码、信息
     * @param message
     * @return
     */
    public static ResultDto error(String message) {
        logger.debug("返回错误：code={}, message={}", ResultEnum.ERROR.getCode(), message);
        return new ResultDto(ResultEnum.ERROR.getCode(), message, null);
    }

    /**
     * 封装自定义的状态码和信息
     * @param code
     * @param message
     * @return
     */
    public static ResultDto build(int code, String message) {
        logger.error("返回结果：code={}, message={}", code, message);
        return new ResultDto(code, message, null);
    }

    /**
     * 根据枚举对象封装相应结果
     * @param resultEnum
     * @return
     */
    public static ResultDto build(ResultEnum resultEnum) {
        logger.debug("返回结果：code={}, message={}", resultEnum.getCode(),
                resultEnum.getDesc());
        return new ResultDto(resultEnum.getCode(), resultEnum.getDesc(), null);
    }

}
